/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fgv.tcc.fgv.imovel.service;

import br.com.fgv.tcc.fgv.imovel.dao.Dao;
import br.com.fgv.tcc.fgv.imovel.dao.UsuarioDao;
import br.com.fgv.tcc.fgv.imovel.model.TipoUsuario;
import br.com.fgv.tcc.fgv.imovel.model.Usuario;
import br.com.fgv.tcc.fgv.imovel.util.HibernateUtil;
import java.io.Serializable;
import java.util.List;
import javax.ejb.Stateless;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Restrictions;
import org.primefaces.json.JSONArray;

/**
 *
 * @author adao
 */
@Stateless
@Path("usuario")
public class UsuarioService extends ServiceGeneric {

    private UsuarioDao usuarioDao;

    public UsuarioService() {
        super(Usuario.class);
        usuarioDao = new UsuarioDao();
    }

    @Override
    protected Dao getDaoManager() {
        return usuarioDao;
    }

    @GET
    @Path("recuperaClientes")
    @Produces("application/json")
    public List<Usuario> recuperaClientes() {
        Criteria crit = HibernateUtil.getSessionFactory().openSession().createCriteria(Usuario.class);
        crit.add(Restrictions.eq("tipoUsuario", TipoUsuario.CLIENTE));
        return usuarioDao.recuperaClientes(crit);
    }

    @GET
    @Path("recuperaClientesNovo")
    @Produces("application/json")
    public JSONArray recuperaClientesNovo() {
        Criteria crit = HibernateUtil.getSessionFactory().openSession().createCriteria(Usuario.class);
        crit.add(Restrictions.eq("tipoUsuario", TipoUsuario.CLIENTE));

        return new JSONArray(usuarioDao.recuperaClientes(crit));
    }

    @GET
    @Path("recuperaCorretores")
    @Produces("application/json")
    public Usuario recuperaAdministradores() {
        Criteria crit = HibernateUtil.getSessionFactory().openSession().createCriteria(Usuario.class);
        crit.add(Restrictions.eq("tipoUsuario", TipoUsuario.CORRETOR));
        Usuario listaUsuarios = new Usuario();
        listaUsuarios.setUsuarios(usuarioDao.recuperaClientes(crit));
        return listaUsuarios;
    }

    @GET
    @Path("remover/{id}")
    @Produces("application/json")
    public String remover(@PathParam("id") Integer codigoUsuario) {
        Usuario usuario = new Usuario();
        usuario.setCodigo(codigoUsuario);
        try {
            super.remover(usuario);
            return "true";
        } catch (HibernateException e) {
            return e.getMessage();
        }
    }

    public Usuario logar(Usuario usuario) {
        return (Usuario) usuarioDao.logar(usuario);
    }

    @GET
    @Path("recupera/{id}")
    @Produces("application/json")
    public Usuario recuperaUsuario(@PathParam("id") int id) {
        return (Usuario) usuarioDao.recuperar(id);

    }

}
